マルチブートの仕方(Windows初級編)
まず、MS-DOSからWindowsMEまでは基本的なブートシーケンスは全く同じだ。MBRのブートストラップローダがアクティブパーティションのブートセクタを読み、これが最初のIO.SYSを読む。この後どんどんOSが起動していく訳だ。
[MS-DOS、Windows95/98などのブートシーケンス]
このようにこれらのOSでは、途中処理を分岐できる部分が全然ないのでデュアルブートなどが不可能だ。
Windows9x系OSではシステムディレクトリ(デフォルトではWINDOWSディレクトリ)は、その名称も、またインストールパーティションも変更できるので、例えばWindows95はシステムディレクトリを「C:\WINDOWS」にし、Windows98は「D:\WINDOWS」とするなどして、マルチブートできないのかと考える人もいるだろう。
しかし、システムディレクトリがどこにあるかは、MSDOS.SYSというテキストファイルに書かれていて、IO.SYSはこの情報を元にWindowsを起動する。この動作自体は変更できない。またこれらのファイル群は全てブートパーティション上(Cドライブ)に存在する必要がある。結局システムディレクトリを分けたとしても、それを分岐起動する仕組みがないので、デュアルブート、マルチブートは出来ないのだ。
一方Windows NTでは、
[WindowsNTのブートシーケンス]
途中NTLDRというものが介在する。これが処理分岐を可能にしているので、この先に別々のシステムディレクトリにインストールされたWindowsNTなどを起動し分けることができる訳だ。
Windows2000/XPは、Windows NTの後継OS(内部的にはWindows NT 5.0、及び5.1)なので、基本的にブートに関する動きはWindows NTと同じと思ってもらって結構だ。新しいOSだけに、Windows NT 4.0が持ついくつかの制限が撤廃されているが、その点についてはその都度説明する。特にWindows2000/XPについての記述がない場合は、Windows NTと同じと判断してほしい。
尚、今後このサイトでは、WindowsNT、Windows2000、及びWindowsXPを総称して「NT系OS」としばしば表現する。
まずは、基本的なNTLDRによるマルチブートの仕組みを見てみよう。もう一度NTのブートシーケンスを見てほしい。
[WindowsNTのブートシーケンス]
ブートセクターのNT IPLは、まずNTLDRを探して実行する。NTLDRはカレントにある「boot.ini」というファイルを読んでメニューを表示する。このboot.iniというファイルが非常に重要なファイルで、ここに起動するOSの情報が書かれており、これによってNTLDRの動作がほぼ決まる。
boot.iniの内容に基づいて起動メニューをNTLDRが表示し、ユーザの入力を待つ。ユーザが起動OSを選択すると、その選択情報を元にNTDETECT.COMが実際にそのOSを探して起動する。尚bootfont.binというファイルがあれば、メニューが日本語になる。英語表示でもいいのなら必須ファイルではない。
またこれらの、NTLDR、boot.ini、NTDETECT.COM、bootfont.binなどのファイルは全てブートパーティション(Cドライブ)の直下に置かれている。それ以外の場所に置いてはいけない。
次にboot.iniをもう少し詳しく見てみよう。Windows NT 4.0 の場合だが、他のバージョンやWindows2000でも大差ない。
[boot.iniの内容]
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00" multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00 [VGA mode]" /basevideo /sos |
通常のWindowsの初期化ファイルの仕様通り、[]で囲まれたセクションと、エントリ=値から構成されている。[operating systems]セクションに2つのエントリがあり、これの値(=の後ろ部分)がメニューとして表示され選択可能になる。この場合、通常の起動とVGA modeの起動(Windows98などでいうSafe modeにあたる。問題があって通常の起動ができない場合などに選択する)が選択できる。エントリにはどのディスクのどのパーティションなのかの指定がある。
[boot loader]セクションには、timeoutエントリがあり、これがその下のデフォルトエントリを起動するまでの入力待ち時間(秒)だ。defaultエントリは、[operating systems]セクションのメニューのうちデフォルトで起動するもの(タイムアウト時間が来ると自動的に選択されるもの)のエントリをそのまま記述する。
上記のようなboot.iniの場合、OS選択の画面は以下のようになる。
[NTLDRによるOS選択画面]
OS Loader V4.00 オペレーティング システムの選択
↑ キーと ↓ キーを使って、起動するオペレーティング システムを選択し、 Enter キーを押してください。 システムが自動的に起動するまで:30 |
NTをたとえばCドライブ、Dドライブ、Eドライブと3つを次々にインストールすると、上記2つのメニューが次々にboot.iniに追加される。
[3つのWindows NT 4.0 をインストールした後のboot.ini]
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(3)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00" multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00 [VGA mode]" /basevideo /sos multi(0)disk(0)rdisk(0)partition(2)\WINNT="Windows NT Workstation Version 4.00" multi(0)disk(0)rdisk(0)partition(2)\WINNT="Windows NT Workstation Version 4.00 [VGA mode]" /basevideo /sos multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation Version 4.00" multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation Version 4.00 [VGA mode]" /basevideo /sos |
この場合の、起動画面は以下のようになる。
[NTLDRによるOS選択画面]
OS Loader V4.00 オペレーティング システムの選択
↑ キーと ↓ キーを使って、起動するオペレーティング システムを選択し、 |
そのままだと全て同じ表示なので、以下のようにカスタマイズするとそれぞれのOSの区別がしやすくなる。
[boot.iniの書き換え例]
[boot loader] timeout= 10 default=multi(0)disk(0)rdisk(0)partition(3)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00 C" multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00 C [VGA mode]" /basevideo /sos multi(0)disk(0)rdisk(0)partition(2)\WINNT="Windows NT Workstation Version 4.00 D" multi(0)disk(0)rdisk(0)partition(2)\WINNT="Windows NT Workstation Version 4.00 D [VGA mode]" /basevideo /sos multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation Version 4.00 E" multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation Version 4.00 E [VGA mode]" /basevideo /sos |
エントリの値(表示されるもの)にドライブ名を追加してある。またtimeoutもデフォルトの30秒では長いので、10秒にしてあり、このようなboot.iniの場合、以下のようなOS選択画面になる。
[NTLDRによるOS選択画面(カスタマイズ)]
OS Loader V4.00 オペレーティング システムの選択
↑ キーと ↓ キーを使って、起動するオペレーティング システムを選択し、 |
どの部分が、どのような動作の、またどの表示部分を司っているかだいたい理解できただろう。
ところで上記のようにNTのOS選択機能を使って別の種類のOSではなく、複数のWindows NTをインストールし、起動する意味があるのだろうか。我々のようにソフトウェアを開発している人間には実は有用だ。NTには様々なService Pack(SP)があるが、アプリケーション開発者としては、そのSP毎にサポートを行う。テストを行う上で様々なSPがあたった環境は必須だ。また普通の人でも、予備のWindows NTをインストールしておいて、もし本番NTが何からかのトラブルで起動しなくなった場合のレスキューOSとして、予備のNTを使うといった用途にも利用できる。
因みに前述したようにboot.iniはWindowsNTでは読み取り専用なので、属性を変更しないと編集できない(Windows2000/XPでは読み取り専用ではない)。編集したあとは特に元の属性に戻さないでも、動作に支障はないようだ。私はいつも編集できる状態にしているが、一応安全のため最初は常に編集後元に戻しておこう。
一方Windows2000/XPでは、隠しファイルとなっているので、エクスプローラの「ツール」メニュー -> 「フォルダオプション」メニューで開く「フォルダオプション」ダイアログの「表示」タブの「詳細設定」で、以下のように設定しないと見れない。
[Windows2000で、boot.iniを見れるようにする表示属性]
図のように、「ファイルとフォルダの表示」は、「すべてのファイルとフォルダを表示する」にするとともに、一番下の「保護されたオペレーティングシステムファイルを表示しない(推奨)」のチェックを外する。そうするとCドライブの直下あるboot.iniをエクスプローラでも見ることができる。
またこのような設定変更をしないでも、「スターとメニュー」->「ファイル名を指定して実行..」に「c:\boot.ini」と書いて実行するとメモ帳が起動して、boot.iniを編集することができる。
ところでこれは蛇足だが、もし誤って以下のように、defaultエントリに実際に[operating systems]セクションにないものを記述してしまった場合どうなるだろうか。
[[operating systems]セクションに無いエントリがdefaultになっている場合]
[boot loader] timeout=30 default= multi(0)disk(0)rdisk(0)partition(2)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00" multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00 [VGA mode]" /basevideo /sos |
その場合、本来デフォルトで選択されるメニューがないので、NTLDRは次のように、「NT (default)」というメニューを作って表示する。
[NTLDRによるOS選択画面(+Windows95)]
OS Loader V4.00 オペレーティング システムの選択
↑ キーと ↓ キーを使って、起動するオペレーティング システムを選択し、 Enter キーを押してください。 システムが自動的に起動するまで:30 |
Windows 2000の場合、これが「Windows 2000 (default)」というメニューになる。Windows XPだと「Windows XP(規定)」となり、むりやり「default」を日本語化して、かえって意味がわからんものになっている。もしこのようなおかしなメニューが表示されたら、それはdefaultエントリが間違っているということなので、boot.iniをチェックしてほしい。
NTLDRによるマルチブートはNT系OSにとっては標準の動作なので、マルチブート上のトラブルはあまりないのだが、いくつか気を付けなければならないことがある。
Windows 2000では、NTFSが新しいNTFS5というものに変更されている。Windows NTでは、ServicePack 4以降でないと、このNTFS5パーティションを認識できない。それだけならば、大した問題ではなかったはずだ。新しいOSがサポートする新しいファイルシステムが古いOSから読めないのはFAT32の時など、今に始まった問題ではないからだ。
ところが何とWindows 2000はそれがインストールされたパーティションのみならず、同一PC上のあらゆる既存のNTFSパーティションを見つけ次第、片っ端からこのNTFS5に変更するという、とんでもない暴挙に出る。
だからもしSP3以前のWindows NTがある環境に、Windows 2000をインストールすると、このWindows NTは自分のいる場所が見えなくなって、起動ができなくってしまう。これは全くひどい仕様と言わざるをえない。
従って、Windows NTとWindows 2000のマルチブートを行うときは、必ず予めWindows NTに、Service Pack4以降を当てておく必要がある。後からでは起動ができなくてSP当てができないので、必ず事前に当てておかねばならない。これを怠って、Windows NTが起動できなくなったら、現状ではフォーマットからの再インストールか、Windows 2000対応のPartitionMagic 6.0などでNTFS5をFATに戻すといった荒療治しか手がない。
尚、FATパーティションは変更がないので、Windows NTがFATパーティションにインストールされている場合はこの問題は起こりない。またそのためWindows9xなども問題はない。
もし、どうしても事情があってWindows NTにSP4以降を当てることができず、Windows 2000とマルチブートを行う必要があるなら、Windows NTはFATパーティションにインストールする必要がある。尚、FATパーティションでなければならないのは、WINNTディレクトリのあるパーティションだけで構いない。WINNTディレクトリがCドライブでない場合、CドライブがNTFS5になっても起動は可能だ。まああまりいい構成ではないが。
因みに、NTFSパーティションにSP3以前のWindows NTを残したまま、Windows 2000の共存される方法も実はない訳ではない。これは話が若干高度になるので、その説明は「Windows中級編」に譲る。
また、Windows XPもほぼWindows 2000と同じだ。インストール時に「Service Pack 5以上にする必要がある」旨の警告が出たが、実際はSP4でも大丈夫だった。しかし、上記メッセージも根拠がないとも思えず、使っていく上で何らかの問題がある可能性があるので、Windows
XPをインストールする場合は、Windows NTをSP5以上にしておいた方がいいだろう。
Windows 2000とWindows XPとの同居において、特にWindows2000のSPレベルに気をつける必要はないようだ。XPでも新たにNTFSがNTFS5.1に変わったが、これはWindows 2000でも認識できるため、特に予めSPが何もあたっていなくても、同居上の問題は起こりない。
尚、WindowsXPでは、XP上でフォーマットした場合だけNTFS5.1にする。Windows2000のように見つけたNTFS領域を片っ端からNTFS5.1に変換してしまうというようなことはやらない。
また、Windows XPのNTLDRは、Windows2000の休止状態をサポートしていないので、XPと2000のマルチの場合、Windows2000側は休止状態が使えないと思った方がいいだろう。
次にインストールの順序によっては他にもいくつかの問題がある。
Windows2000の後にWindowsNTをインストールするとNTLDRなどがWindowsNTのものに戻ってしまうが、WindowsNTのNTLDRでは、Windows2000を起動できない。これはNT側のSPのレベルに関わらず起動できない。
もし後からWindowsNTをインストールしてしまって、Windows2000が起動しなくなったら、Windows2000のセットアップCD-ROMのi386フォルダ内にあるNTLDR、NTDETECT.COM、及びbootfont.binをコピーして現在のものに上書きしてほしい。Windows2000の修復セットアップでも可能だが、こっちの方が遥かに簡単だね。
もっとも、Windows2000の後にWindowsNTをインストールする場面というのは、前述の問題があるので、ありそうでかなり稀だとは思う。ブートドライブのファイルシステムがFAT16である必要がある訳だが、Windows2000をFAT16で使っている方は非常に少ないであろう。
この問題はWindowsXPの後にWindows2000/NTをインストールした場合も同じだ。Windows2000以下のNTLDRでは、WindowsXPを起動できない。やはりWindows2000側のSPレベルに依存しない。
同様にWindowsXPのセットアップCD-ROMのi386フォルダ内から3つのブート関連ファイルをコピーしてほしい。こちらはWindowsXPの後にWindows2000のインストールすることに対して障壁がないので、結構やってしまうかもしれない。
さて、基本的なNT系OSのマルチブートの仕組み、問題点が分かったところで、これにWindows9xが加わる仕組みを見てみたいと思う。
Windows9xがインストールされている環境に、後からWindows NT/2000/XPをインストールするとこれらのインストーラが自動的にWindows9xとのデュアル(マルチ)ブート環境を構築してくれる。構築後のブートシーケンスは次のようになる。
[Windows95/98、WindowsNTのデュアルブートシーケンス]
NT系OSのインストーラが自動的に、ブートセクタをNTのそれに書き換える前に、元のブートセクターを「bootsect.dos」というファイルに退避し、起動時のメニューにも追加する。NTLDRにこれを読み込ませれば、従来のWindows95が起動する。
それまで、MBRのブートストラップローダが直接ブートセクターにあったDOS IPLを実行していたものが、NT IPL、及びNTLDRを経由するようになっただけだが、元のブートセクターをファイルとして退避していおり、それをNTLDRが読み込んで実行できるあたりが注目すべき動作だ。この機能を「チェーンロード」と呼ぶのだが、その詳細については「チェーンロードとカーネルロード」を参照してほしい。
NTLDRがチェーンロード機能を持っていることが、Windows9xの他、LinuxやFreeBSDなど他のOSも起動できる理由になっているが、この点については後のページで説明しここでは省略する。以下にWindows9xが既にインストールされた環境に対し、Windows NTをインストールした場合に、NTのインストーラが自動的に構築したデュアルブート環境におけるboot.iniを示す。
[Windows95をブートできる場合のboot.iniの内容]
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00" multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00 [VGA mode]" /basevideo /sos C:\="Microsoft Windows" |
「C:\」というエントリが追加されている。このエントリの値は「"Microsoft Windows"」だから、これがメニューに追加されるのは簡単に理解できるだろう。画面は以下のようになる。
[NTLDRによるOS選択画面(+Windows95)]
OS Loader V4.00 オペレーティング システムの選択
↑ キーと ↓ キーを使って、起動するオペレーティング システムを選択し、 Enter キーを押してください。 システムが自動的に起動するまで:30 |
問題は「C:\」というエントリがどうして「Windows9x」を表すのかだが、これはドライブ名だけ指定された場合(ファイル名が省略された場合)、その直下の「bootsect.dos」というファイルをブートセクター(ファイル)とみなす、という決まりがあるためだ。何度か説明したが、Windows9xがインストールされている環境にWinodws NTをインストールした場合、NTのインストーラは既存のブートセクターがWindows9xのそれであることを発見した場合、それをbootsect.dosというファイルに退避し、独自のブートセクターに置き換える。そしてそのファイル化したブートセクターから起動する仕組みを元々持っているので、そのためのメニューをboot.iniに仕込む訳だ。
ファイル名を省略せずに、「C:\Bootsect.dos」というエントリとしても構いない。NTLDRには指定されたものをブートセクターとして読み込むという機能がある訳だ。この機能を利用して、後でいろいろなことをやってむので、よく覚えておいてほしい。
またこの「C:」というドライブ名だが、これも厳密にCドライブを表している訳でもない。これは実は「NTLDRのあるところ」という意味でしかない。だから例えばこれらのファイルをフロッピーに置いて、WindowsNTを起動できるのだが、その場合、ここを「A:」としてはいけない。ちゃんと「C:」としておかないと、フロッピーのデータが読まれないのだ。
尚、NTLDRを利用しても、Windows9xを複数起動し分けることはできない。これの理由、及び回避方法については、もう少し難しい話になるので、「Windows中級編」に譲る。
今見てきたように、Windows9xとNT系OSのデュアルブート環境は、NT系OSのインストーラが自動的に構築してくれるので、構築そのものは簡単だが、気をつけなければいけないのは、どのようなパーティション構成にするかということだ。
ポイントとして、ブート系のファイル(各OSでブートに必要な最低限のファイル)とWindowsディレクトリやWINNTディレクトリなどのシステムディレクトリを置くパーティションは分けて考える必要があるという点である。これは前者(ブート系ファイル)と後者(システムディレクトリ)では、パーティションの種類や選択可能なファイルシステムなどの制約が大きく違うからだ。
以下にブートセクターやNTLDRと共に、Cドライブに存在しなければならないブートに最低限必要なファイルを示す。どうしてこれらのファイルがブートセクターと共にCドライブに存在しなければならないかは、「ブートセクター」で説明している。
[NT系OSのブートドライブ(Cドライブ)に必要なファイル]
NTLDR boot.ini bootfont.bin ntdetect.com |
上記のうち「bootfont.bin」はメニューの日本語表示のためのファイルなので必須ではない。無い場合は英語で表示されるだけだ。一方Windows9x系で、やはりCドライブに存在する必要のあるファイルを示す。
[Windows9x,MS-DOSのブートドライブ(Cドライブ)に必要なファイル]
IO.SYS MSDOS.SYS COMMAND.COM CONFIG.SYS AUTOEXEC.BAT |
CONFIG.SYSとAUTOEXEC.BATは、必須ファイルではないが、Windowsでは起動時に一旦沢山のDOSドライバを読むので大抵は必要だ。必要な場合はブートドライブに存在しなければなりない。
NTのブートセクタはアクティブな基本領域に存在しなければいけない。またNTLDRもブートセクターのある領域に必要だ。またIO.SYSなどもやはりアクティブな基本領域に存在する必要があるので、結局NTLDRは双方のOSが理解できるファイルシステム上に存在しなければいけない。
このアクティブな基本領域はMicrosoftのOSでは必ずCドライブとなる。Cドライブ=アクティブ基本領域ということは確り覚えておいてほしい。ドライブレターの中でもCはただ単にハードディスクのドライブの最初ということに留まらず、非常な重要な響きを持っている。
結局NTLDRとこれらのファイルは共にCドライブに存在する必要があるため、CドライブだけはWindows9xでもWindows NTでも理解できるファイルシステムでなければならないという制約が生まれる。双方が理解できるファイルシステムはFAT16しかない。従ってWindows9x系とWindowsNTのデュアルブートを実現するには、アクティブな基本領域(つまりCドライブ)をFAT16にしておく必要がある。
一方システムディレクトリは論理領域に置くことも可能だし、他のアクティブでない基本領域にも置けます。またブート時にBIOSで認識しているなら、他のハードディスク上に置いても構わない。更にNT系OSの場合は、BIOSで認識できないハードディスク上にシステムディレクトリを置くことすらできる。かなりブート系ファイルと比べて、置き場所に柔軟性がある。そのため基本的に各OSごとで別のパーティションとすることが可能なのでそれぞれのOSに最適なファイルシステムを選択することができる。
[Windows95、WindowsNTのデュアルブートのパーティション構成]
上記の例ではWindows95及びNT系OSの双方のブート系ファイルはアクティブな基本領域であるところのCドライブにあり、一方Windows95のシステムディレクトリは同じくCドライブに、WindowsNTのシステムディレクトリは論理領域であるDドライブに存在しているという意味になる。
Windows95ではNTFSを理解できないので、右の論理領域は見えないことになる。Windows NTのシステムディレクトリ領域(例ではDドライブ)もWindows95から見えるようにFAT16にしても構いない。しかしNTFSにしないとWindows NTの強力なセキュリティは利用できない。もっとも個人利用の場合はあまり問題ないかもしれないが、FAT16は非常に効率の悪いファイルシステムなので、あまりお薦めできない。システムディレクトリの領域はなるべくNTFSとした方がいいだろう。
Windows2000/XPになると、現状の全てのWindows系のファイルシステムが理解できるので、CドライブをFAT32にしてしまうこともできる。Windows98からWindows2000とのデュアルブート環境を構築した場合、以下のような構成がしばらく主流だった。
[Windows98、Windows2000のデュアルブートのパーティション構成]
やはりWindows2000のシステムディレクトリ領域もFAT32にしても構いない。FAT32なら効率は悪くないので、NTFSとの差異はセキュリティだけになり、個人利用の場合あまり気にしなくてもいいかもしれない。しかしWindows2000/XPはNTFSでの利用が本流なので、やはりこちらの利用をお薦めする。
上記の例ではWindowsNT/2000のシステムディレクトリを置く領域は論理領域にしているが、これには理由がある。そもそもWindows9xのfdiskでは複数の基本領域を作れない。またWindows NTでは、インストール前に作成するには、セットアップ中の領域作成フェーズで作成するのだが、この時は明示的に領域の種類(基本か論理か)を指定できず、既にある領域の状態によって決まってしまう。
Windows NTのセットアップ中の領域作成フェーズで作成した場合は次のような動きになる。まず全く新規に作成した場合(つまりまだHDDに何の領域もない場合)は基本領域になり、そうでない場合は論理領域となる。
結局Windows NTインストール前にもう一つの基本領域を作ることは、少なくともこれらのOSしかない状態ではできない。もっともWindows NTインストール後、NTのディスクアドミニストレータでは基本領域を作ることはできるので、一旦Windows9xと同じパーティションにWindows NTをインストールして、そのWindows NTのディスクアドミニストレータで基本領域を作成した後、そこにWindows NTをインストールするという手もあるが、ここまでしてWindows NTの領域を基本領域にする意味はない。従ってWindows NTの領域は論理領域でも一向に構わないと思う。
ところで既に構築されたWindows9xやNT系OSのデュアルブート環境のいずれかのOSを削除して、ひとつのOS、または一部のOSのみにしたい場合があるだろう。たとえばWindows98を使用していてWindows2000を導入し、時期もたってすっかり2000に慣れたので、もはやWindows98が必要なくなったとか、逆にどうもWindows2000が使いにくいため、もうWindows98だけでいいので、元のWindows9xだけが素直に起動する状態に戻したいと思う場合もあるだろう。整理すると次のパターンがあると思う。
まず最初のWindows9xのみに戻すパターンだが、勿論NT系OSをアンインストールすることになる訳だ。通常のOSのアンインストールというのは、アプリケーションと違って、「アプリケーションと追加と削除」から行うような所謂アンインストール手順というものがある訳ではない。そのOSに関係したデータを削除してしまうしかない訳だ。
NT系OSに関係したデータというと、そのシステムディレクトリ(例えばWINNTディレクトリ)やNTLDRやNTDETECT.COMなどのブート系ファイルということになる。Windows9xとは別のパーティションにインストールしていたなら、そのパーティションのProgram Filesディレクトリなども削除してしまって構わないだろう。
しかしブート系ファイルを削除する前に、Windows9xの起動ディスクなどから起動するか、Windows9xのDOSプロンプトで「sys c:」というコマンドを打つ必要がある。こうすることによって、元のIO.SYSを読むDOS IPLを含んだブートセクターにする(戻す)ことができ、NTLDRが必要なくなる。
ちょっと誤解されやすいので詳しく説明する。まずNTLDRなどWindowsNT/2000関連のファイルを消しただけでは下図の通り、ブートセクターのNTのIPLがNTLDRを見つけることができなくなるだけで、ブートシーケンスがそこで停止してしまうだけになる。この時「NTLDR is missing」というエラーメッセージが表示されるはずだ。
[デュアルブート環境からのNT関連ファイルの削除]
デュアルブート環境では、Windows9xのブートシーケンスもNTLDR経由になっていたので、これでは結局何も起動できなくなってしまう。
ブートセクターは何度か説明した通り、ファイルではない(ファイルシステムの埒外にあるものな)ので、エクスプローラなどで書き換えたり、消したりすることはできない。そこでこのファイルとして扱えないブートセクターをWindows95/98などのDOS IPLを含むものに戻すために「sysコマンド」を使う訳だ。
[sysコマンドのよるブートセクターの復元]
さて、これでもはやNTLDRを探しにはいかないので、直にWindows95/98が起動されるようになる。上図ではNTLDRなどが削除されているが、勿論まだ残っていてもブートセクターが戻った以上、もうNTLDRを読みに行くことはないので、Windows95/98のブートシーケンスの邪魔をしたりはしない。またファイル化した昔のブートセクターであるbootsect.dosももはや不要なファイルということになる。
ところで最近非常に多い誤解なのだが、NTLDRによるWindows9x系とNT系OSのデュアルブート環境にはマスターブートレコードは一切関わっていない。だからマスターブートレコードの修復によく利用される「FDISK /MBR」コマンドはデュアルブート環境に対して何の変化も与えない。デュアルブート環境の削除にこのコマンドを打てという話を、雑誌の記事に書いたり、ネットニュースに投稿してるバカがたくさんいるが、間違いなので気をつけてほしい。
この「FDISK /MBR」とは「FDISK」というコマンドを「/MBR」というスイッチ(オプション)をつけて実行することだが、これはマスターブートレコード内の先頭446bytesにあるプログラム領域にIBMオリジナルのブートストラップローダを書き込むためのコマンドだ。
動作そのものは単に上記のようなことをするだけだが、MBRに例えばLinuxのローダであるLILOやSystemCommanderなどMBR導入型ブートローダをインストールした場合や、何らかの事情(例えばウィルスなど)で同領域(MBRのプログラム領域)が破壊された場合に、元のIBMオリジナルのブートストラップローダに戻して、素直にアクティブな基本領域のOSを起動できるようにするといった用途によく利用される。
[FDISK /MBRコマンドの動作]
上記の用途にもある通り、このコマンドはLILOやSystem Commanderなどを用いたデュアル(マルチ)ブート環境の削除のために用いられることが多いコマンドなので、同様にNTLDRを用いたデュアル(マルチ)ブート環境の削除にも使えるとの誤解が生じたものと思われる。
MicrosoftのOSはたとえWindowsXPでも、基本的なMBRのブートストラップローダの動作は変えていない。このローダによる「アクティブな基本領域のブートセクターをロード」というブートシーケンスのステージにはMS-DOS以来一切変更されていない(それ故、NTLDRによるマルチブートにはいろいろと制約があるのだが)。だから、いくらこのコマンドをたたいても、NTLDRによるデュアルブート環境が削除されることはない訳だ。
ただしFDISKのバージョンによって、書き込むブートストラップローダは微妙に違う。また、このコマンドは上図でも分かる通りパーティションテーブル以降には触れない。尚、NT系OSのデータを削除するといってもブート系ファイルは量的には殆どゴミ程度のものしかないので、別に残しておいても構わないだろう。残っていたからといってWindows9xの動作に問題を起こすわけではない。
次に逆にNT系OSのみに戻すパターンだ。こちらは削除するのがWindows9x側ということになる。
こちらは至って簡単だ。ブートセクターはそのままでいいので、基本的にデータの削除だけでいいからだ。システムディレクトリやIO.SYSなどのブート系ファイルをすべて削除してもNT系OSの起動には何の支障もない。その他ブートメニューにWindows9xのエントリが出るのはうざったいだろうから、Boot.iniからエントリを消せば、跡形もなく消えたことになる。勿論エントリが残っていても一向に構いない。そのことが残ったNT系OSの動作に影響を及ぼすということは一切ない。
次にNT系OS同士のデュアルブート環境でいずれかのOSのみにするパターンだが、これも非常に簡単だ。それこそブート系ファイルもそのままでいいので、システムディレクトリの削除とboot.iniからそのOSのエントリを削除するだけだ。
しかしWindows2000とWindowsXPのデュアルブートをしていた場合、NTLDRなどのブート系ファイルはWindowsXPのものを使用しているだろう。この環境からWindows2000のみに戻す場合は、「NT系OS同士のマルチブート時の注意」でも説明したように、WindowsXPのNTLDRなどのブート系ファイルはWindows2000の休止状態に対応していないので、もしこの機能を使いたいのなら、ブート系ファイルもWindows2000のものに戻しておいた方がいいだろう。Windows2000のインストールCDのi386ディレクトリからコピーすることでブート系ファイルを戻すことが可能だ。
またWindowsNTとWindows2000のデュアルブートにしていて、WindowsNTにだけに戻す場合、基本的にNTLDRなどのブート系ファイルはそのまま、Windows2000のものを使用し続けても動作上は全く問題ない。ただ起動時のメッセージなどに「Windows 2000」という文言が表示されて、まだWindows2000が残っているような印象を受けるだろう。これは気にする必要はないのだが、どうしても気になる人はやはりWindowsNTのインストールCDのi386フォルダからブート系ファイルをコピーして、これらのファイルのWindowsNTのものに戻すといいだろう。しかし何度も言うようにブート系ファイルがWindows2000のものでも動作上は全く問題ない。
尚、いずれの場合でも削除するOSが別パーティションにある場合は、そのパーティションも消してしまえないか、せめてフォーマットしてしまうことはできないかと考える場合があるだろう。基本的に残すOSよりも後ろのパーティションに削除OSが入っている場合は問題ないが、たとえパーティションを消してしまっても構いない。その逆の場合、パーティション自体を削除することはドライブレターなどが狂うため不可能と考えてもらっていいだろう。ただしフォーマットしてしまうことは問題ない場合が多い。しかし消したいOSがCドライブにある場合はそういう訳にもいかない。
[Windows98、Windows2000のデュアルブートのパーティション構成]
前のパラグラフでパーティション構成の説明に使った構成だが、そこでも基本領域にWindows98とあるのは、あくまでWindows98のシステムディレクトリがあることを示し、論理領域にWindows2000とあるのはここにWindows2000のシステムディレクトリがあることを示してると述べた。
既に述べたように、CドライブにはWindows2000の起動に不可欠なNTブートセクターやNTLDRなどのブート系ファイルが存在しており、Windows2000にとって欠くべからざるパーティションとなっている。従って、Windows98が必要なくなったとしても、この領域まで必要なくなった訳ではないことは理解してもらえると思う。したがってこの領域をフォーマットしてしまうことはできない。
しかし、ではブート系ファイルをDドライブに移したらどうかと思うかもしれない。残念ながら例の構成ではDドライブは論理領域なので不可能だ。前のパラグラフでも述べたように、ブート系ファイルは絶対にアクティブな基本領域に置く必要があるからだ。
では更に突っ込んで、もしWindows2000のシステムディレクトリの領域が上記例とは違って、基本領域だったらどうだろう。それならここにブート系ファイルを移して、アクティブにしてしまえば、いいようにも思える。しかし残念ながらこれも適わない。
それはWindowsの場合、システムディレクトリのドライブレターの変更は基本的に動作保証がされていないからだ。WindowsNTの場合、結構動いてしまうがやはり再インストールが必須と考えて頂いた方が無難かと思う。
こういったことがあるので、マルチブートのパーティション構成の設計は、将来のことも考えて、きちんと設計しておく必要がある。後で構成変更しようと思っても、なかなかできない場合があるからだ。
因みにこの「Windows初級編」では、基本的に複数の基本領域のことは扱いない。これは前のパラグラフでも述べたように作成がちょっと面倒であり、またかなりいろいろな問題があり、高度な話になるので「Windows中級編」に譲る。中級編は最低「機能編」は読んでから進んでほしい。
デュアルブート環境をつくるには、Windows9xの後にNT系OSをインストールする必要があると述べたが、逆では無理なのだろうか? 基本的に無理ではない。ただWindows95のインストーラはインストール時にWindows9x用のブートセクターに書き換えたまま、NTのインストーラのように元のブートセクターをファイルに退避するなどということはしない。ちょうど先程説明した「sysコマンド」を実行したのと同じ状態になる。
NTLDRによるメニュー画面も出ず、いきなりWindows9xが起動し始めるので、多くの初心者がWindows2000やXPが起動しなくなったと慌てることになる。しかし慌てる必要はない。書き換えられたのはCドライブのブートセクターだけだ。その他のNT系OSのためのデータは全て残っている。
問題はその書き換えられたブートセクターを元のNT用のものに戻す(修復する)必要がある訳だが、その修復方法もいくつかある。まずその内の最もオーソドックスな方法としてWindows NT/2000の場合、修復セットアップの「ブートセクターの検査」という手段がある。具体的には以下の手順だ。
かなり手続きが面倒だが、これは結局、「sysコマンド」の逆を行うことになる。Windows2000の場合は、「ブートセクターの検査」のほかに、回復コンソールの「fixboot」というコマンドでもブートセクターの修復が可能だ。上記3番で、「C」で「回復コンソール」を選択できるから、こちらに進む。やがて修復するOSの選択フェーズ、administratorのパスワード入力などを経て、コマンドプロンプトが出るから、ここで「fixboot」とコマンドを打ちます。ブートセクターの修復だけなら、こちらの方がちょっと速いかもしれない。
Windows XPの場合も、回復コンソール及び修復セットアップの2通りの方法があるが、修復セットアップはWindows2000やNTのように作業項目を限定することができないため、再インストールと同じくらい時間がかかります。従ってWindows XPの場合は回復コンソールを使う方が遥かに便利だ。だいたいWindows2000と同じような手順だ。
また別のツールを使うが、もう少し簡単な方法もある。BootPartというユーティリティを使う方法だ。http://www.winimage.com/bootpart.htmから入手可能なフリーソフトで見た目DOSコマンドのようだが、れっきとしたWin32コンソールアプリケーションだ。WindowsNT/2000のブートセクターの修復の他、様々なことが可能な便利なユーティリティで、DOS上(起動ディスク、またはWindows9xのCommand Prompt Only)、またはWindowsNT/2000上で動作する。(Windows9xのMS-DOSプロンプトでは動作しない)
WindowsNT/2000のブートセクターの修復は、WindowsNT/2000が起動しない状態で行うだろうから、Windows9xの起動ディスクで起動するか、Windows9xの起動時にShift-F5、またはF8で起動メニューを出して「Command Prompt Only」で起動して、以下のように実行する。
[BOOTPARTユーティリティによるブートセクターの修復]
C:\> bootpart winnt boot:c: |
これだけで修復完了だ。先の2つの方法より簡単だと思う。BootPartユーティリティは非常に便利なユーティリティなので、NTLDRを使ったデュアルブートを行っているなら、一つ持っていて損のないものだから入手しておこう。BootPartユーティリティの詳しいことは「BootPartユーティリティの使い方」にまとめてあるから、もっと詳しく知りたい方は参照ほしい。
ところで、Windows98のインストーラの場合は、NTとのデュアル環境を考慮したつくりになっているので、インストール時にその環境になっている場合はブートセクターを書き換えない。この場合は基本的にはちゃんとNTLDRによるデュアルブート環境を維持することができる。しかしどうもうまくいかない場合も多いようだ。理由はわからない。しかしこの場合でもWindows95の時と同じように修復できる。
もっともパーティション構成によってはWindows NTの後にWindows9xをインストールするのは難しい場合がある。たとえば既にCドライブがNTFSになっているような場合だ。この場合は基本的には別の基本領域にWindows9xをインストールして、アクティブ切り替え機能のあるブートローダを使う必要がある。このあたりの詳細は、「機能編」以降を参照してほしい。いずれにしても基本はWindows9xの後にWindows NTをインストールするというのは問題のないデュアルブート環境構築の順序だ。
WindowsNT/2000の後に、Windows9xをインストールした場合でも、通常は前述のように簡単に修復できることは分かったと思う。しかしWindows9xのインストール時にCドライブをフォーマットしてしまった場合、話は少しややこしくなる。
実際、インストール時にフォーマットすることは多いと思うし、リカバリCD-ROMからのインストールの場合、勝手にフォーマットされてしまうことも多いだろう。ここではそういう場合のデュアルブート環境の修復について説明する。
ところで、フォーマットしてしまうとそうでない場合に比べ、なぜ話が少し面倒になるのだろうか。それは、Cドライブに存在すべきファイルがなくなってしまうからだ。前段落までは、ブートセクターがDOS-IPLのものになるだけだった。従って、修復するのはブートセクターだけで良かった訳だが、Cドライブをフォーマットしてしまった場合は、以下のCドライブに存在すべき、ファイルも復元しなければならない。
[NT系OSのブートドライブ(Cドライブ)に必要なファイル]
NTLDR boot.ini bootfont.bin ntdetect.com |
この中でNTLDR、bootfont.bin、及びntdetect.comは実行ファイルで全ての環境で共通だがboot.iniだけはあなたの環境特有のものだ(大抵は多くの人が同じような内容だとは思うが)。従って簡単に修復することはできない。
ただし、もしあなたが「システム修復ディスク」を予め作っていたら、ことは格段に簡単になる。この修復ディスクには、boot.iniに書かれる情報が記録されているからだ。では修復ディスクがない場合はどうするのだろうか?
ちょっと脅したようになったが、実はそんなに深刻になる必要はない。幸いboot.iniファイルはテキストファイルなので、起動するWindows9x上でCドライブの直下に自分でメモ帳などを使って作ればいいのだ。
作り方はこのページと「Boot.iniの記述」を参考にしてほしい。決して難しいものではない。繰り返しになるが「修復ディスク」がある場合は、自分でboot.iniファイルを作る必要はない。これから説明する修復プロセスで自動的にboot.iniファイルが作成される。
非常に重要なのでまた後でも説明するがこのBoot.iniの作成は、修復ディスク無しで修復セットアップを実行するのに必須のアイテムだ。修復ディスク無しで修復セットアップをする場合、OSの「自動検出」をさせるが、これは実は単にboot.iniを見ているだけなのだ。決してハードディスクを総なめして、WINNTディレクトリを探してくる訳ではない。だからboot.iniを正しく記述しないと検出が成功せず、修復セットアップを続行できない。
boot.iniファイルを作成したら、早速修復にかかりましょう。ここではboot.iniファイルを自分で作った場合と、修復ディスクがある場合の両方の説明をする。手続き的には殆ど同じなので。また前段落のフォーマットしていない場合の修復とも殆ど同じだ。違いがどこにあるか気をつけて読んでほしい。
基本的にこれで修復は完了だ。サービスパックを既に適用済みの人は当てなおしてほしい。
なお、先に紹介したBootPartユーティリティではこの場合は修復出来ないので上記方法を実施してほしい。
前の段落でCドライブをフォーマットしてしまった場合を説明した。修復ディスクがない場合で、エラーになり、にっちもさっちもいきない場合でも通常は何とかなることが分かったと思う。
しかし前述の例では、Windows9x上でCドライブをフォーマットしてしまった場合なので、CドライブはFAT16やFAT32になっているはずだ。だから、起動するWindows9x上やあるいはWindows9xの起動ディスクからboot.iniを回復し、修復セットアップを実行可能にすることができたが、何らかのミスや事情、または事故で、CドライブをNTFSでフォーマット、またはNTFS上のブートファイルの喪失が起きてしまったらどうなるだろう。
もちろん他にWindows NT/2000が稼動しているマシンがあって、ハードディスクを増設、または一時的にも接続可能なら、そこに接続して問題のNTFSフォーマットのCドライブのboot.iniを修復するという手もあるが、そのような環境をすぐに用意することができない人も多いだろう。
そこで最後の頼みの綱として、Windows 2000の回復コンソールに頼ることになる。尚、Windows NTの場合は、回復コンソールといったものはないので、この場合上記のように他の稼動中のパソコンに接続する他ない。
回復コンソールでは、様々なことが可能だ。これまでも多少は説明してきた。ここでは、NTFS上のboot.iniの修復方法と、NTFSパーティションのNTLDRなどのブート系の回復方法を解説する。また回復コンソールの使い方も簡単に説明する。
回復コンソールのログオン画面は以下のようなものだ。
[回復コンソールのログオン画面]
Microsoft Windows 2000(R) 回復コンソール。 回復コンソールはシステムの修復と回復機能を提供します。 Exit と入力すると、回復コンソールを終了し、コンピュータを再起動します。
1. C:Winnt どのWindows 2000 インストールにログオンしますか? (取り消すには Enter キーを押してください) _
|
ここで何らかのOSにログオンする必要があるのだが、Cドライブの修復の場合どこにログオンしても構いない。ただし気を付けなければならないのは、ドライブレターは必ずしもそれぞれのOSから見たものとこの回復コンソール上でのそれと同じとは限らないことだ。
最初にOSをインストールする場合と同じドライブレターの振られ方をするので、現状とは違っていることが考えられる。特にハードディスクを増設している場合、へたするとCドライブすら、ずれる可能性がある。具体的には、例えばSCSIハードディスクを利用していて、BIOSでSCSIの先にサーチするように指定し、SCSIハードディスクをCドライブとしている場合でも、回復コンソールでは、ドライバを読み込んだ順序でハードディスクを認識するので、IDEが先に認識される場合がある。その場合は通常はWindows2000上では、Fドライブと認識されているIDEハードディスクの基本領域が、回復コンソール上では、Cドライブとなり、SCSIハードディスクの基本領域が後ろの方になる場合がある。だから修復するCドライブが一体どこなのか、ちゃんとファイルの数なども確認してから実行する必要がある。
回復コンソールで使用できるコマンドはHELPコマンドで確認することができる。またパラメータにコマンドを指定してHELPコマンドを実行すると、そのコマンドの使い方も分かります。たとえば「HELP COPY」と打つとCOPYコマンドの使用方法が表示される。DOSコマンドと同じようなイメージで実行できるコマンドが多い。
ディレクトリのファイルを表示するDIRコマンドや、ディレクトリを移動するCDコマンド、ドライブを移動する「ドライブレター:」などは全くDOSコマンドと一緒だ。しかし最近はDOSコマンドなど打ったこともない人が多いだろうから、多少悩むかもしれないが、まあちょっとやってればすぐに慣れるものだ。
さて、早速boot.iniの修復だが、回復コンソールでは残念ながらテキストファイルを編集するエディタのようなものは用意されていない。TYPEコマンドで中身を見ることはできるが、ファイルを編集できない。しかしCOPYコマンドで、外部からファイルをコピーすることができる。従って他で作成、編集、修正したboot.iniをフロッピーなどに入れて、ハードディスクにコピーしてしまえばいい訳だ。
[ファイルのCOPY(COPYコマンド)]
C:\> copy a:\boot.ini c:\ |
COPYコマンドも、DOSのCOPYコマンドを同じような感覚で使用できる。ただしフロッピーなどのリムーバブルディスクからハードディスクへのCOPYは可能だが、その逆、つまりハードディスクからリムーバブルディスク(フロッピーやMOなど)にCOPYはできない。予めレジストリを変えることでリムーバブルディスクにもコピーできるようにすることができるが、まあそんなに必要性はないのでいいだろう。またboot.iniなどは読み取り専用になっていたり、システム属性が着いているのでそのままではCOPYコマンドに拒否される。
この場合は、やはりファイル属性を変更するためのコマンドとしてDOSコマンドと同じATTRIBコマンドが使用できる。
[ファイル属性の変更(ATTRIBコマンド)]
C:\> attrib -s-r boot.ini |
このようにしてファイルのシステム属性(S)や隠し属性(H)、または読み取り専用属性(R)などを取り除けば、表示や上書きが可能になる。また読み取り専用属性とシステム属性の2つを外したい場合、「ATTRIB -R-S ファイル名」というようにオプションを繋げて、複数指定できる。ただしDOSコマンドと違い、回復コンソールのATRRIBコマンドでは、オプション間にスペースを入れて(つまりオプション間を離して)はいけない。
またboot.iniを編集するにあたり、「Boot.iniの記述」を参照してもらいたいのだが、それでも正しい記述なのか不安かもしれない。実際どういう記述をすべきか分からない場合にそれを確認するのに便利なコマンドがある。MAPコマンドをARCオプションをつけて実行する。
[パーティションのARCパスの確認]
C:\> map arc
C: 4096MB multi(0)disk(0)rdisk(0)partition(0) |
このようにドライブレターとパーティションサイズとARCパスが表示される。このドライブレターも前述のように回復コンソールの認識によるものなので、そのパーティションサイズなどから、目的のパーティションなのかどうかを確認する必要がある。
目的のパーティションであることが確認できたらば、そのARCパスに基づいてboot.iniを編集し、フロッピーなどからコピーする。また、NTLDRやNTDETECT.COMなどのファイルも、インストールCDからCドライブにコピーすることが、COPYコマンドによって可能だ。
[ファイルのCOPY(COPYコマンド)]
C:\> copy E:\i386\ntldr c:\ |
通常は、インストールCD-ROMのi386ディレクトリにNTLDRなどがそのままの形(圧縮などされずに)存在している。一応DIRコマンドなどでCD-ROMのどこに目的のファイルがあるか確認してもいいだろう。
このように回復コンソールを利用すれば、修復目的のパーティションがたとえNTFSフォーマットだったとしても、恐れる必要はない訳だ。どうしてもうまく修復セットアップが実行できない時はトライしてみてほしい。
今まで説明してきたWindows9xとNT系OSのデュアルブート環境を、たとえば別のハードディスクに引っ越すとか、データはそのままでパーティションサイズを変更するとか、フォーマットしてデータだけレストアするといった、環境の変更を行う場合、注意しなければならいことがある。 NT系OSは起動できるのに、Windows9xが起動しないという不具合が起こる場合がある。もう一度この環境のブートシーケンスを見てほしい。
[Windows95/98、WindowsNTのデュアルブートシーケンス]
Bootsect.dosファイルに退避した、昔のブートセクターには図のようなDOS IPLの他に退避時のパーティションの情報を含んだ ディスクパラメータ(BPB)を持っている。この詳細は「ブートセクター」と「ディスクパラメータ」を参照してほしい。このディスクパラメータには引用のページでも解説しているように、様々なディスクやパーティションの情報が書かれていて、DOS IPLはこの情報を元にIO.SYSなどを探しにいく。
この状態で当該パーティションに対し、このディスクパラメータが変更になるような変更を加えたとする。具体的には「パーティションのサイズの変更」などだ。これによってディスクパラメータ情報の更新が行われるのは現在のブートセクターの情報だけだ。つまりファイルBootsect.dos内に書かれているディスクパラメータ情報は更新されない訳である。
当然と言えば当然の話なのだが、この場合bootsect.dos経由のWindows9xの起動時にこのファイル内のDOS IPLはやはりこのファイル内のディスクパラメータを参照するため、現在のパーティション情報と食い違っているので現在のパーティション上にあるIO.SYSなどが探せず、起動不能に陥ってしまう。bootsect.dosはもはや浦島太郎になってしまっている訳だ。これを修復するには以下の手順を踏む。
また、この場面でも先に紹介したBootPartユーティリティが便利だ。この障害時はWindowsNT/2000は起動できるはずだから、WindowsNT/2000のコマンドプロンプトかDOS起動ディスクの起動状態で次のように実行する。
[BOOTPARTユーティリティによるbootsect.dosの修復]
C:\> bootpart win98 bootsect.dos |
これだけで修復完了だ。もう一つの方法より、ずっと簡単だと思う。第1パラメータの「win98」の部分は、「win95」または「win95osr2」でもOKだ。これらの違いは特にないように見える。
ところでどのようにパーティションを変化されるとディスクパラメータに変化が起こるのだろうか。全てのパターンを列挙することはできないが、私が実験した範囲ではFAT32の場合はたった0.1%程度のパーティションサイズの変更でも起こった。この程度の変更でもディスクパラメータのうち、「ルートの最初のクラスター」や「Bigクラスター数/FAT」などが変わり、それによって起動不能になっていた(だから、この値だけ正しいもに書き換えてもいいのだが)。FAT16の場合は、この程度のサイズ変更では大丈夫だった。多少ディスクパラメータで違っているものがあった(全Bigクラスター数)が、起動には支障がないようだ。しかし、5%程度の変更を行うと、「セクター数/FAT」などの値が変わって起動不能となった。
またディスクパラメータを見ると、CHSサイズなど物理ドライブに依存するような情報もあるので、サイズが大きく異なるハードディスクへ引っ越した場合はパーティションサイズなどが変わらなくても変更される可能性がある。いずれにしても、何らかのパーティション操作、ハードディスクの引越しなどで、bootsect.dos経由のOSが起動不能に陥った場合、上記のことを疑って修復を試みてほしい。
因みにPartition Magicでパーティションのサイズ変更などを行った場合、何とbootsect.dosの内容までコッソリ更新していた。「コッソリ」と書いたのは、ファイルの更新日付も変えずに中身を書き換えていたからだ。実はこの項の内容を確かめるためにPartition
Magicでサイズを変更して実験していたのだが、いくらやっても予期していた起動不能状態にならなかったのだ。おかしいと思い、bootsect.dosをバックアップしてから、Partition Magicでパーティションのサイズ変更をし、その後、bootsect.dosを戻したら起動不能になった。そこでサイズ変更前と変更後のbootsect.dosをバイナリ比較したら、何と違っているではないが。もしやと思い、中身のダンプをとって調べてみると、ちゃんと現在のパーティションを反映したディスクパラメータに書き換わっていた。ここまでやるとはちょっと驚きました。Partition
Magic侮りがたしといった感じだ。私はバージョン4以降しか使ったことがないので、バージョン3以前でどのような動作をするか分からないが、すくなくともバージョン4では上記動作を行う。
しかしVersion 5.01までは、FAT16の場合に書き換え方にバグがあって(FAT32向きのIPLにわざわざ書き換えてて、ディスクパラメータだけFAT16のまま、こりゃバグでしょ)、うまく動かないでした。ただしVersion6.0では修正されている。またちょっと意地悪な実験だが、bootsect.dosをリネームしてBoot.iniに記述してみたが、変更されないかった。Boot.iniの記述とは関係なく、ただ単に「bootsect.dos」という名称のファイルだけ、書き換えを行っているようだ。
また同じPowerQuestの製品であるDriveImage3.0Jでも、目的は違うがサイズを変更できるので、どのようになるか実験してみた。やはり見事にbootsect.dosを書き換えてくれる。日付を変更せずにコッソリ書き換える手法も同じだ。こちらはこのバージョンしか試してないが、同バージョンなら廉価版のDriveCopyなども同じことをするのではないだろうか。